有一群人正在排隊!每個人都用一個pair(h,k)描述,h是這個人的身高,k代表排在這個人前面有多少人的身高是高於或等於h的。
寫一個算法重排已每個人都能符合h,k的要求。
在這裡 我們能使用C++ STL中提供的priority queue,定義出比較優先權的函式並符合題目要求,這樣我們只要將所有人插入到這個priority queue,在將所有人逐一拿出,這樣就能得到答案了!
依題目 2個相同高,我們就比較誰需要高的在前面人數比較多,不同高就比較身高。
class cmp{
public:
cmp(){}
bool operator()(vector<int>& a, vector<int>& b){
return (a[0] < b[0]) || (a[0] == b[0] && a[1] > b[1]);
}
};
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
priority_queue< vector<int>, vector<vector<int>>, cmp> pq;
vector<vector<int>> ans;
for(int i = 0; i < people.size(); i++){
pq.push(people[i]);
}
while(!pq.empty()){
ans.insert(ans.begin()+pq.top()[1], pq.top());
pq.pop();
}
return ans;
}
};